package com.cnaaa.pay.service;

import com.alipay.api.AlipayApiException;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradeCloseResponse;
import com.cnaaa.pay.bo.TradeQuery;
import com.cnaaa.pay.entity.Trade;
import com.cnaaa.pay.vo.alipay.TradePayVo;

import java.util.Map;

/**
 * 2018/10/26 Create by 郭文梁
 * AlipayService
 * 支付宝服务封装
 *
 * @author 郭文梁
 * @date 2018/10/26
 */
public interface AlipayService {
    /**
     * 构建订单请求
     *
     * @param tradePayVo 订单描述
     * @return 请求
     */
    AlipayTradePagePayRequest buildTradePagePayRequest(TradePayVo tradePayVo);

    /**
     * 创建订单
     *
     * @param request 订单请求
     * @return 返回HTML
     */
    String tradePay(AlipayTradePagePayRequest request);

    /**
     * 处理支付宝返回结果
     *
     * @param params 返回参数
     * @return 是否正常
     */
    boolean checkReturnSign(Map<String, String> params);

    /**
     * 查询订单状态
     *
     * @param query 查询条件
     * @return 查询结果
     * @throws AlipayApiException ApiException
     */
    String query(TradeQuery query) throws AlipayApiException;

    /**
     * 关闭订单
     *
     * @param query 商户订单号或之腐败交易订单号
     * @return 结果
     * @throws AlipayApiException API异常
     */
    AlipayTradeCloseResponse close(TradeQuery query) throws AlipayApiException;

    /**
     * 支付某个订单
     *
     * @param trade 订单
     * @return 一个会自动提交的表单^_^(由支付宝API生成)
     * @throws AlipayApiException API异常
     */
    String pay(Trade trade) throws AlipayApiException;

    /**
     * 关闭订单
     *
     * @param trade 订单
     * @return 关闭订单是否成功
     * @throws AlipayApiException API异常
     */
    boolean close(Trade trade) throws AlipayApiException;
}
